#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <math.h>
#include <stdint.h>
#include "user.h" 
#include "cloud.h"

int murmurhash(int s, User *u) { //murmurhash函数
    uint32_t h = u->user_hashseed ^ 0x5bd1e995;  // 初始哈希值, 使用 seed 进行异或
    uint32_t k = (uint32_t)s;  // 将输入的 s 转换为 uint32_t
    
    // 进行一个基本的哈希循环处理
    k *= 0x5bd1e995;  // 常数乘法
    k ^= k >> 24;     // 右移 24 位并进行异或
    k *= 0x5bd1e995;  // 再乘以常数

    h *= 0x5bd1e995;  // 对 h 执行相同的操作
    h ^= h >> 13;
    h *= 0x5bd1e995;
    h ^= h >> 15;
    int hash = (int)(h);
    hash = hash % TABLE_SIZE;

    return hash;  // 将哈希值转为 int 类型并返回
}

void public_hashseed(CloudServer *c){// 云平台为每个用户生成一组公用随机数，作为哈希函数的随机种子
    c->public_hashseed = rand() % 999 + 1 ;  
}

void user_get_hashseed(User *u, CloudServer *c){ //用户从云平台获取公用的哈希种子

        u->user_hashseed = c->public_hashseed;
    
}